package com.campus.food.service;

import com.campus.food.model.entity.OrderDetail;

import java.util.List;

/**
 * 订单详情服务接口
 * 
 * @author Claude3.7 Sonnet
 * @since 2025-05-29
 */
public interface OrderDetailService {
    
    /**
     * 添加订单详情
     * @param orderDetail 订单详情信息
     * @return 添加成功的订单详情
     */
    OrderDetail addOrderDetail(OrderDetail orderDetail);
    
    /**
     * 根据ID查询订单详情
     * @param id 订单详情ID
     * @return 订单详情信息
     */
    OrderDetail getOrderDetailById(Long id);
    
    /**
     * 更新订单详情
     * @param orderDetail 订单详情信息
     * @return 更新结果
     */
    boolean updateOrderDetail(OrderDetail orderDetail);
    
    /**
     * 删除订单详情
     * @param id 订单详情ID
     * @return 删除结果
     */
    boolean deleteOrderDetail(Long id);
    
    /**
     * 根据订单ID查询订单详情列表
     * @param orderId 订单ID
     * @return 订单详情列表
     */
    List<OrderDetail> getOrderDetailsByOrderId(Long orderId);
    
    /**
     * 根据订单ID删除订单详情
     * @param orderId 订单ID
     * @return 删除结果
     */
    boolean deleteOrderDetailsByOrderId(Long orderId);
    
    /**
     * 批量插入订单详情
     * @param orderDetails 订单详情列表
     * @return 插入结果
     */
    boolean addOrderDetailsBatch(List<OrderDetail> orderDetails);
    
    /**
     * 根据菜品ID查询订单详情列表
     * @param foodId 菜品ID
     * @return 订单详情列表
     */
    List<OrderDetail> getOrderDetailsByFoodId(Long foodId);
    
    /**
     * 查询指定菜品的销售统计
     * @param foodId 菜品ID
     * @return 销售数量
     */
    Integer getSalesCountByFoodId(Long foodId);
    
    /**
     * 根据订单ID列表批量查询订单详情
     * @param orderIds 订单ID列表
     * @return 订单详情列表
     */
    List<OrderDetail> getOrderDetailsByOrderIds(List<Long> orderIds);
    
    /**
     * 计算订单详情总金额
     * @param orderId 订单ID
     * @return 总金额
     */
    Double calculateOrderDetailTotal(Long orderId);
    
    /**
     * 验证订单详情数据完整性
     * @param orderId 订单ID
     * @return 验证结果
     */
    boolean validateOrderDetails(Long orderId);
} 